package com.guldan.jaina.provider;

import java.util.List;

import com.guldan.core.dubbo.client.ResponseDTO;
import com.guldan.core.search.Pagination;
import com.guldan.jaina.dto.citizeninfo.CitizenInfoSearchDTO;
import com.guldan.jaina.dto.orgbatchsummary.OrgBatchSummaryDTO;
import com.guldan.jaina.dto.orgbatchsummary.OrgBatchSummarySearchDTO;
import com.guldan.jaina.dto.progress.BarDTO;
import com.guldan.jaina.dto.projectregisterbatch.BatchAuditorDTO;
import com.guldan.jaina.dto.projectregisterbatch.CopyBatchDataDTO;
import com.guldan.jaina.dto.projectregisterbatch.ProjectRegisterBatchDTO;
import com.guldan.jaina.dto.projectregisterbatch.ProjectRegisterBatchSearchDTO;
import com.guldan.jaina.dto.projectregisterupload.ProjectRegisterUploadDTO;
import com.guldan.jaina.dto.register.RegisterTemplateDTO;
import com.guldan.jaina.dto.register.RegisterTemplateDataDTO;
import com.guldan.jaina.dto.register.RegisterTemplateSearchDTO;
import com.guldan.jaina.dto.register.RegisterUploadResultDTO;
import com.guldan.jaina.dto.register.summary.SummaryDTO;
import com.guldan.jaina.dto.register.summary.SummaryDetailDTO;
import com.guldan.jaina.dto.register.summary.SummaryFileDTO;
import com.guldan.jaina.dto.registerfail.RegisterFailDTO;
import com.guldan.jaina.dto.registerfail.RegisterFailSearchDTO;
import com.guldan.jaina.dto.registersuccess.RegisterDeleteDTO;
import com.guldan.jaina.dto.registersuccess.RegisterSuccessDTO;
import com.guldan.jaina.dto.registersuccess.RegisterSuccessSearchDTO;

/**
 * Created by Silas.
 * Date: 2016/12/3
 * Time: 17:13
 */
public interface IProjectRegisterProvider {

    //查询补贴登记项目信息
    ResponseDTO<ProjectRegisterBatchDTO> getProjectRegisterBatchDTO(ProjectRegisterBatchSearchDTO searchDTO);

    //查询补贴登记项目汇总记录信息
    ResponseDTO<OrgBatchSummaryDTO> getOrgBatchSummaryDTO(OrgBatchSummarySearchDTO searchDTO);

    /*乡镇登记*/
    //+++++++++++++++++++++++++++++++++++++++++//
    //列表返回当前正在登记中的项目批次记录
    ResponseDTO<Pagination<ProjectRegisterBatchDTO>> townsRegistingList(ProjectRegisterBatchSearchDTO searchDTO);

    //列表返回已经提交上报的项目批次列表
    ResponseDTO<Pagination<ProjectRegisterBatchDTO>> townsRegistedList(ProjectRegisterBatchSearchDTO searchDTO);

    //列表返回已经完结的项目批次列表
    ResponseDTO<Pagination<ProjectRegisterBatchDTO>> finishBatchList(ProjectRegisterBatchSearchDTO searchDTO);

    //提交登记上报
    ResponseDTO<Boolean> approvalSubmit(Integer batchId);

    //列表查看所有登记失败人员的列表
    ResponseDTO<Pagination<RegisterFailDTO>> registFailList(RegisterFailSearchDTO searchDTO);

    //失败人员的列表
    ResponseDTO<Pagination<RegisterSuccessDTO>> failList(RegisterSuccessSearchDTO searchDTO);

    //成功人员的列表
    ResponseDTO<Pagination<RegisterSuccessDTO>> successList(RegisterSuccessSearchDTO searchDTO);

    //删除某个已经成功登记居民
    ResponseDTO<Boolean> deleteCitizen(RegisterDeleteDTO dto);

    //获取某个已经成功登记的居民信息
    ResponseDTO<RegisterSuccessDTO> getCitizen(Integer registerId);

    //保存某个已经成功登记的居民信息
    ResponseDTO<RegisterSuccessDTO> saveCitizen(RegisterSuccessDTO dto);

    //列表返回已经成功登记的居民信息
    ResponseDTO<Pagination<RegisterSuccessDTO>> listCitizen(RegisterSuccessSearchDTO searchDTO);

    //整体删除某个登记批次记录
    ResponseDTO<Boolean> deleteRegisterBatch(Integer batchId);

    /*乡镇人员复核*/
    //+++++++++++++++++++++++++++++++++++++++++++++++
    //列表返回乡镇人员复核,当前需要操作的批次列表
    ResponseDTO<Pagination<ProjectRegisterBatchDTO>> townsAuditoringList(ProjectRegisterBatchSearchDTO searchDTO);

    //列表返回乡镇人员复核,复核通过的批次列表
    ResponseDTO<Pagination<ProjectRegisterBatchDTO>> townsAuditoredList(ProjectRegisterBatchSearchDTO searchDTO);

    //对批次操作，复核通过、复核不通过、上报
    ResponseDTO<Boolean> townsAuditorSubmit(BatchAuditorDTO dto);

    //对登记记录进行操作，复核通过、复核不通过
    ResponseDTO<Boolean> townsAuditorSubmitForRegister(BatchAuditorDTO dto);

    //列表查看某批次下待复核的登记记录列表
    ResponseDTO<Pagination<RegisterSuccessDTO>> townsAuditorWaitCizList(RegisterSuccessSearchDTO searchDTO);

    //下载登记
    ResponseDTO<List<RegisterTemplateDTO>> needReportingList(RegisterTemplateSearchDTO searchDTO);

    //系统内新建登记批次
    ResponseDTO<BarDTO> createRegisterBatch(RegisterTemplateSearchDTO searchDTO);


    //上传登记
    ResponseDTO<BarDTO> uploadCitizen(String[] header, List<RegisterTemplateDataDTO> data);

    //获取上传动作记录
    ResponseDTO<List<ProjectRegisterUploadDTO>> listUploadRecord(Integer batchId);

    /*主管部门审批*/
    //+++++++++++++++++++++++++++++++++++++++++++++++
    //主管部门,待审批批次列表
    ResponseDTO<Pagination<ProjectRegisterBatchDTO>> orgAuditorList(ProjectRegisterBatchSearchDTO searchDTO);

    //对批次进行审批，审批通过、审批不通过
    ResponseDTO<Boolean> orgAuditorApproval(BatchAuditorDTO dto);

    //对登记人员记录进行审批，审批通过、审批不通过
    ResponseDTO<Boolean> orgAuditorApprovalForRegister(BatchAuditorDTO dto);

    //对批次进行汇总上报
    ResponseDTO<Boolean> orgAuditorSubmit(BatchAuditorDTO dto);

    //主管部门上报汇总后，汇总批次记录
    ResponseDTO<Pagination<OrgBatchSummaryDTO>> orgBatchSummaryList(OrgBatchSummarySearchDTO searchDTO);

    //获取某个批次下的登记成功人员记录
    ResponseDTO<Pagination<RegisterSuccessDTO>> orgAuditorRegisterList(RegisterSuccessSearchDTO searchDTO);

    /*区县财政审批*/
    //+++++++++++++++++++++++++++++++++++++++++++++++
    //财政待审批批次汇总记录
    ResponseDTO<Pagination<OrgBatchSummaryDTO>> financeAuditorList(OrgBatchSummarySearchDTO searchDTO);

    //对批次汇总记录进行审批，审批通过、审批不通过
    ResponseDTO<Boolean> financeAuditorApproval(BatchAuditorDTO dto);

    //查看某批次汇总下的登记成功人员记录
    ResponseDTO<Pagination<RegisterSuccessDTO>> financeAuditorRegisterList(RegisterSuccessSearchDTO searchDTO);

    //财政通过审批的批次汇总列表
    ResponseDTO<Pagination<OrgBatchSummaryDTO>> financeAuditoredSummaryBatchList(OrgBatchSummarySearchDTO searchDTO);

    //财政对批次汇总生成代发文件
    ResponseDTO<SummaryFileDTO> financeCreatedFile(String summaryId);

    //更新summary状态
    ResponseDTO<Boolean> updateSummaryState(int phase, String summaryId, String url);

    //银行回执上传
    ResponseDTO<BarDTO> financeUploadReceipt(String summaryId, List<SummaryDetailDTO> detailList);

    ResponseDTO<List<RegisterSuccessDTO>> getRegisterList(CitizenInfoSearchDTO citizenInfoSearchDTO);

    //登记批次一键结转
    ResponseDTO<BarDTO> copyBatchData(CopyBatchDataDTO dataDTO);


}
